﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Loja.Banco;

namespace Loja.Aplicação
{

    public class CadastroControle
    {
        public LOJA banco { get; set; }

        public CadastroControle(LOJA b)
        {
            banco = b;
        }

        public void Salvar(Cadastro cadastro)
        {
            banco.AddToCadastro(cadastro);
            banco.SaveChanges();
        }

        public void Atualizar(Cadastro cadastro)
        {
            banco.SaveChanges();
        }
        /*
        public IEnumerable<Cadastro> Listar()
        {
            return banco.Cadastro.ToList();
        }
        */
        public Object Listar()
        {
            var cadastroListar = (from x in banco.Cadastro.Include("TipoCadastro")
                                  where x.Desativado.Equals(false)
                                  select x).ToList(); 

            return cadastroListar;
        }

        public Object ListarClienteVenda()
        {
            var cadastroListar = (from x in banco.Cadastro
                                  where x.Desativado.Equals(false)
                                  select new
                                  {
                                      Código = x.Cadastro_ID,
                                      x.Nome
                                  });

            return cadastroListar;
        }

        public Object ListarClienteTipoCadastro(TipoCadastro tipoCadastro)
        {
            var cadastroListar = (from x in banco.Cadastro
                                  join a in banco.TipoCadastro on x.TipoCadastro.TipoCadastro_ID equals a.TipoCadastro_ID
                                  where x.Desativado.Equals(false)
                                  && a.TipoCadastro_ID.Equals(tipoCadastro.TipoCadastro_ID)
                                  select x).ToList();

            return cadastroListar;
        }

        public Cadastro BuscaCadastroCompra(Int32 cadastro)
        {   
            Cadastro cadastrobuscar = (from x in banco.Cadastro
                                       where x.Desativado.Equals(false)
                                       && x.Cadastro_ID.Equals(cadastro)
                                       select x).First();
            return cadastrobuscar;           
        }

        public Object BuscarClienteCampo(String campo)
        {
            var cadastroListar = (from x in banco.Cadastro.Include("TipoCadastro")
                                  where x.Nome.Contains(campo)
                                  && x.Desativado.Equals(false)
                                   select x).ToList();
            return cadastroListar;
        }

        public Object BuscarClienteCampoTipoCadastro(String campo, TipoCadastro tipoCadastro)
        {
            var cadastroListar = (from x in banco.Cadastro
                                  join a in banco.TipoCadastro on x.TipoCadastro.TipoCadastro_ID equals a.TipoCadastro_ID
                                  where x.Nome.Contains(campo)
                                  && x.Desativado.Equals(false)
                                  && a.TipoCadastro_ID.Equals(tipoCadastro.TipoCadastro_ID)
                                  select x).ToList();
            return cadastroListar;
        }

        public void Alterar(Cadastro cadastro)
        {
            Cadastro cadastroAlterar =( from x in banco.Cadastro
	                                   where x.Cadastro_ID == cadastro.Cadastro_ID
                                       && x.Desativado.Equals(false)
	                                  select x).First();
            
            cadastroAlterar = cadastro;

            banco.AddToCadastro(cadastroAlterar);
            banco.SaveChanges();

        }

        public void Excluir(Cadastro cadastro)
        {
            Cadastro cadastroExcluir = (from x in banco.Cadastro
                                        where x.Cadastro_ID == cadastro.Cadastro_ID
                                        && x.Desativado.Equals(false)
                                        select x).First();

            cadastroExcluir.Desativado = false;

            banco.AddToCadastro(cadastroExcluir);
            banco.SaveChanges();
        }

        public Cadastro Buscar(Cadastro cadastro)
        {
            Cadastro cadastrobuscar = (from x in banco.Cadastro
                                        where x.Cadastro_ID == cadastro.Cadastro_ID
                                        && x.Desativado.Equals(false)
                                        select x).First();
            return cadastrobuscar;
        }

        public Cadastro Buscar(Int32 cadastro)
        {
            Cadastro cadastrobuscar = (from x in banco.Cadastro.Include("TipoCadastro")
                                       where x.Cadastro_ID == cadastro
                                       && x.Desativado.Equals(false)
                                       select x).First();
/*
            var compras = (from x in banco.Compra.Include("ItemCompra.Produto").Include("Cadastro")
                           where (x.DataCompra >= dataInicio && x.DataCompra <= dataFim)
                           select x).ToList();
            */
            return cadastrobuscar;
        }
    }
}